#include "../src/estructuraDatos/Escenario.h"
#include<iostream>
using namespace std;

void testEscenario(){
	cout<<"inicia el test de escenarios"<<endl;

	Punto* punto1 = new Punto(1,2);
	Punto* punto2 = new Punto(3,4);
	Punto* punto3 = new Punto(5,6);
	Punto* punto4 = new Punto(7,8);
	Punto* punto5 = new Punto(9,10);
	Punto* punto6 = new Punto(11,12);
	Punto* punto7 = new Punto(13,14);
	Punto* punto8 = new Punto(15,16);
	Punto* punto9 = new Punto(17,18);

	Objeto* obj1 = new Objeto("obj1",*punto1,"accion1","path1");
	Objeto* obj2 = new Objeto("obj2",*punto2,"accion2","path2");
	Objeto* obj3 = new Objeto("obj3",*punto3,"accion3","path3");
	Objeto* obj4 = new Objeto("obj4",*punto4,"accion4","path4");
	Objeto* obj5 = new Objeto("obj5",*punto5,"accion5","path5");
	Objeto* obj6 = new Objeto("obj6",*punto6,"accion6","path6");
	Objeto* obj7 = new Objeto("obj7",*punto7,"accion7","path7");
	Objeto* obj8 = new Objeto("obj8",*punto8,"accion8","path8");
	Objeto* obj9 = new Objeto("obj9",*punto9,"accion9","path9");

	Lista<Objeto>* objetos1 = new Lista<Objeto>();
	objetos1->agregar(*obj1);
	objetos1->agregar(*obj2);
	objetos1->agregar(*obj3);
	objetos1->agregar(*obj4);
	objetos1->agregar(*obj5);
	objetos1->agregar(*obj6);

	Lista<Objeto>* objetos2 = new Lista<Objeto>();
	objetos2->agregar(*obj6);
	objetos2->agregar(*obj7);
	objetos2->agregar(*obj8);
	objetos2->agregar(*obj9);

	Lista<Objeto>* objetos3 = new Lista<Objeto>();
	objetos3->agregar(*obj9);
	objetos3->agregar(*obj8);
	objetos3->agregar(*obj7);
	objetos3->agregar(*obj6);
	objetos3->agregar(*obj5);
	objetos3->agregar(*obj4);

	Lista<Objeto>* objetos4 = new Lista<Objeto>();
	objetos4->agregar(*obj8);
	objetos4->agregar(*obj9);

	Escenario* escenario1 = new Escenario("escenario1","fondo1",objetos1);
	Escenario* escenario2 = new Escenario("escenario2","fondo2",objetos2);
	Escenario* escenario3 = new Escenario("escenario3","fondo3",objetos3);
	Escenario* escenario4 = new Escenario("escenario4","fondo4",objetos4);

	Lista<Escenario>* escenarios = new Lista<Escenario>();
	escenarios->agregar(*escenario1);
	escenarios->agregar(*escenario2);
	escenarios->agregar(*escenario3);
	escenarios->agregar(*escenario4);

	//muestro todos los elementos de la lista de escenarios
	IteradorLista<Escenario> itEscenario = escenarios->iterador();
	while(itEscenario.tieneSiguiente()){
		Escenario escenarioActual = itEscenario.siguiente();
		cout<<"escenario: "<<escenarioActual.getNombre()<<endl;
		cout<<"\t\tfondo:"<<escenarioActual.getFondo()<<endl;
		//recorro los objetos de este escenario actual
		IteradorLista<Objeto> itObjetos = escenarioActual.getObjetos()->iterador();
		cout<<"\t\t<objetos>"<<endl;
		while (itObjetos.tieneSiguiente()){
			Objeto objActual = itObjetos.siguiente();
			cout<<"\t\tnombre:"<<objActual.getNombre()<<endl;
			cout<<"\t\t\taccion"<<objActual.getAccion()<<endl;
			cout<<"\t\t\tposX: "<<objActual.getPunto().getX()<<endl;
			cout<<"\t\t\tposY: "<<objActual.getPunto().getY()<<endl;
			cout<<"\t\t\tpath:"<<objActual.getPath()<<endl;
		}
	}

	delete punto1;
	delete punto2;
	delete punto3;
	delete punto4;
	delete punto5;
	delete punto6;
	delete punto7;
	delete punto8;
	delete punto9;

	delete obj1;
	delete obj2;
	delete obj3;
	delete obj4;
	delete obj5;
	delete obj6;
	delete obj7;
	delete obj8;
	delete obj9;

	delete objetos1;
	delete objetos2;
	delete objetos3;
	delete objetos4;

	delete escenario1;
	delete escenario2;
	delete escenario3;
	delete escenario4;

	delete escenarios;
}
